
/*
编写一个程序，接受用户输入的一个字符串，并输出该字符串中出现频率最高的字符。
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFER_SIZE 100

/* 插入排序 */
char insertSort( char *str, int len)
{
    char copyChar;
    /* 插入排序从一开始 */
    for(int idx = 1; idx < len; idx++)
    {
        /* 索引备份 */
        int preIdx = idx - 1;
        /* 数据备份随时存在 */
        copyChar = str[idx];
        while(str[preIdx] > copyChar && preIdx >= 0)
        {
            str[preIdx + 1] = str[preIdx];
            preIdx--;
        }
        str[preIdx + 1] = copyChar;
    }
    printf("排序后：%s\n", str);
    return 0;
}


/* 查找最大值 */
int findArrayMaxNum(int *array)
{
    int max = 0;
    int adx = 0;
    int len = sizeof(array)/sizeof(array[0]);
    for(int idx = 1; idx < len; idx++)
    {
        if(array[idx] > array[adx])
        {
            max = array[idx];
            adx = idx;
        }
    }
    /* 返回最小值 */
    return max;
}

/* 存次数和下标 */
char findCharMaxVal(char *str, int *array, int len)
{
    int pos = 0;
    int count = 1; 
    int array1[BUFFER_SIZE];
    for(int idx = 1; idx < len; idx++)
    {
        /* 索引 */
        int preIdx = idx - 1;
        if(str[idx] == str[preIdx] && pos < len)
        {
            count++;
            if(str[idx + 1] == str[preIdx] && idx < len)
            {
                /* 更新idx */
                for(idx = idx+1; str[idx] == str[preIdx] && idx < len; idx++)
                {
                    count++;
                }

            }
            /* 开辟了两个数组一个存次数一个存小标 */
            /* 次数 */
            array[pos] = count;
            /* 对应次数除1外的次数位置 */
            array1[pos] = preIdx;
            /* count 置1 */
            count = 1;
            pos++;
        }
    }
    /* 查找次数出现最大值并且带出位置 */
    int ret1 = findArrayMaxNum(array);
    /* 打印 */
    printf("字符%c出现%d次\n", str[array1[ret1]], array[ret1]);

}

/* 判断 */
char compareChar( char *str)
{
    int *array = malloc(BUFFER_SIZE * sizeof(int));
    if(array == NULL)
    {
        return 0;
    }
    memset(array, 0, sizeof(int) * BUFFER_SIZE);   

    printf("排序前:%s\n", str); 
    int len = strlen(str);
    printf("长度len:%d\n", len); 
    
    /* 排序 */
    insertSort(str, len);
    /* 存次数和下标 */
    findCharMaxVal(str, array, len);

     /* 释放 */
    if(array != NULL)
    {
        free(array);
        array = NULL;
    }
    return 0;    
}

int main()
{
    char ch;
    char str[]= "asdizkkkkkks"; 
    compareChar(str);

    return 0;
}

